package cn.iocoder.yudao.module.worker.api.category;

import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.trade.api.config.TradeConfigApi;
import cn.iocoder.yudao.module.trade.api.config.dto.AddressRespDTO;
import cn.iocoder.yudao.module.trade.api.config.dto.TradeConfigRespDTO;
import cn.iocoder.yudao.module.worker.api.category.dto.CategoryRespDTO;
import cn.iocoder.yudao.module.worker.controller.admin.category.vo.CategoryPageReqVO;
import cn.iocoder.yudao.module.worker.controller.app.category.vo.AppCategoryPageReqVO;
import cn.iocoder.yudao.module.worker.convert.category.CategoryConvert;
import cn.iocoder.yudao.module.worker.dal.dataobject.category.CategoryDO;
import cn.iocoder.yudao.module.worker.service.category.CategoryService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.List;

import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;

@Service
@Validated
public class CategoryApiImpl implements CategoryApi {

    @Resource
    private CategoryService categoryService;

    @Resource
    private TradeConfigApi tradeConfigApi;

    @Override
    public List<CategoryRespDTO> getCategoryList(Long parentId) {
        CategoryPageReqVO categoryReqVO = new CategoryPageReqVO();
        categoryReqVO.setParentId(parentId);
        List<CategoryDO> categoryDOList = categoryService.getCategoryList(categoryReqVO);
        return CategoryConvert.INSTANCE.convert2(categoryDOList);
    }

    @Override
    public CategoryRespDTO getCategoryById(Long id) {
        CategoryDO categoryDO = categoryService.getCategory(id);
        return CategoryConvert.INSTANCE.convert(categoryDO);
    }

    @Override
    public List<CategoryRespDTO> getAppCategoryList(Long parentId) {
        TradeConfigRespDTO config = tradeConfigApi.getTradeConfig();

        AppCategoryPageReqVO categoryReqVO = new AppCategoryPageReqVO();
        categoryReqVO.setParentId(parentId);
        if(!CollectionUtils.isAnyEmpty(config.getOpenCityAreas())){
            AddressRespDTO address = tradeConfigApi.getAddressByIp(getClientIP());
            categoryReqVO.setIsOline(config.getOpenCityAreas().contains(address.getProvince()));
        }
        List<CategoryDO> categoryDOList = categoryService.getAppCategoryList(categoryReqVO);
        return CategoryConvert.INSTANCE.convert2(categoryDOList);
    }
}
